cmake_minimum_required(VERSION 3.15)
project(Modularization)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)


add_subdirectory(MainModule)   ## 主模块
add_subdirectory(Module1)  ## 模块1
add_subdirectory(Module2)  ## 模块2
add_subdirectory(Module3)  ## 模块3
add_subdirectory(Module4)  ## 模块4
add_subdirectory(Module5)  ## 模块5

################ 处理各个模块之间的依赖 ################
##  模块2 依赖 模块1；设置为私有，依赖链下游不可访问
target_link_libraries(
        libModule2
        PRIVATE
        libModule1
)

##  模块3 依赖 模块1；设置为私有，依赖链下游不可访问
target_link_libraries(
        libModule3
        PRIVATE
        libModule1
)

##  模块4 依赖 模块1；设置为私有，依赖链下游不可访问
target_link_libraries(
        libModule3
        PRIVATE
        libModule1
)

##  模块4 依赖 模块1和模块5；设置为私有，依赖链下游不可访问
target_link_libraries(
        libModule4
        PRIVATE
        libModule1
        libModule5
)

##  主模块 依赖 模块2、模块3、模块4；设置为私有，依赖链下游不可访问
target_link_libraries(
        libMainModule
        PRIVATE
        libModule2
        libModule3
        libModule4
)

################ 生成主程序 ################
add_executable(Modularization main.cpp)

##  主程序依赖 主模块
target_link_libraries(
        Modularization
        PUBLIC
        libMainModule
)